!
function(a, b) {
    "function" == typeof define && (define.amd || define.cmd) ? define(function() {
        return b(a)
    }) : b(a, !0)
} (this,
function(a, b) {
    function c(b, c, d) {
        a.WeixinJSBridge ? WeixinJSBridge.invoke(b, e(c),
        function(a) {
            g(b, a, d)
        }) : j(b, d)
    }
    function d(b, c, d) {
        a.WeixinJSBridge ? WeixinJSBridge.on(b,
        function(a) {
            d && d.trigger && d.trigger(a),
            g(b, a, c)
        }) : d ? j(b, d) : j(b, c)
    }
    function e(a) {
        return a = a || {},
        a.appId = z.appId,
        a.verifyAppId = z.appId,
        a.verifySignType = "sha1",
        a.verifyTimestamp = z.timestamp + "",
        a.verifyNonceStr = z.nonceStr,
        a.verifySignature = z.signature,
        a
    }
    function f(a) {
        return {
            timeStamp: a.timestamp + "",
            nonceStr: a.nonceStr,
            "package": a.package,
            paySign: a.paySign,
            signType: a.signType || "SHA1"
        }
    }
    function g(a, b, c) {
        var d, e, f;
        switch (delete b.err_code, delete b.err_desc, delete b.err_detail, d = b.errMsg, d || (d = b.err_msg, delete b.err_msg, d = h(a, d, c), b.errMsg = d), c = c || {},
        c._complete && (c._complete(b), delete c._complete), d = b.errMsg || "", z.debug && !c.isInnerInvoke && alert(JSON.stringify(b)), e = d.indexOf(":"), f = d.substring(e + 1)) {
        case "ok":
            c.success && c.success(b);
            break;
        case "cancel":
            c.cancel && c.cancel(b);
            break;
        default:
            c.fail && c.fail(b)
        }
        c.complete && c.complete(b)
    }
    function h(a, b) {
        var d, e, f, g;
        if (b) {
            switch (d = b.indexOf(":"), a) {
            case o.config:
                e = "config";
                break;
            case o.openProductSpecificView:
                e = "openProductSpecificView";
                break;
            default:
                e = b.substring(0, d),
                e = e.replace(/_/g, " "),
                e = e.replace(/\b\w+\b/g,
                function(a) {
                    return a.substring(0, 1).toUpperCase() + a.substring(1)
                }),
                e = e.substring(0, 1).toLowerCase() + e.substring(1),
                e = e.replace(/ /g, ""),
                -1 != e.indexOf("Wcpay") && (e = e.replace("Wcpay", "WCPay")),
                f = p[e],
                f && (e = f)
            }
            g = b.substring(d + 1),
            "confirm" == g && (g = "ok"),
            "failed" == g && (g = "fail"),
            -1 != g.indexOf("failed_") && (g = g.substring(7)),
            -1 != g.indexOf("fail_") && (g = g.substring(5)),
            g = g.replace(/_/g, " "),
            g = g.toLowerCase(),
            ("access denied" == g || "no permission to execute" == g) && (g = "permission denied"),
            "config" == e && "function not exist" == g && (g = "ok"),
            b = e + ":" + g
        }
        return b
    }
    function i(a) {
        var b, c, d, e;
        if (a) {
            for (b = 0, c = a.length; c > b; ++b) d = a[b],
            e = o[d],
            e && (a[b] = e);
            return a
        }
    }
    function j(a, b) {
        if (z.debug && !b.isInnerInvoke) {
            var c = p[a];
            c && (a = c),
            b && b._complete && delete b._complete,
            console.log('"' + a + '",', b || "")
        }
    }
    function k() {
        if (! ("6.0.2" > w || y.systemType < 0)) {
            var b = new Image;
            y.appId = z.appId,
            y.initTime = x.initEndTime - x.initStartTime,
            y.preVerifyTime = x.preVerifyEndTime - x.preVerifyStartTime,
            C.getNetworkType({
                isInnerInvoke: !0,
                success: function(a) {
                    y.networkType = a.networkType;
                    var c = "https://open.weixin.qq.com/sdk/report?v=" + y.version + "&o=" + y.isPreVerifyOk + "&s=" + y.systemType + "&c=" + y.clientVersion + "&a=" + y.appId + "&n=" + y.networkType + "&i=" + y.initTime + "&p=" + y.preVerifyTime + "&u=" + y.url;
                    b.src = c
                }
            })
        }
    }
    function l() {
        return (new Date).getTime()
    }
    function m(b) {
        t && (a.WeixinJSBridge ? b() : q.addEventListener && q.addEventListener("WeixinJSBridgeReady", b, !1))
    }
    function n() {
        C.invoke || (C.invoke = function(b, c, d) {
            a.WeixinJSBridge && WeixinJSBridge.invoke(b, e(c), d)
        },
        C.on = function(b, c) {
            a.WeixinJSBridge && WeixinJSBridge.on(b, c)
        })
    }
    var o, p, q, r, s, t, u, v, w, x, y, z, A, B, C;
    if (!a.jWeixin) return o = {
        config: "preVerifyJSAPI",
        onMenuShareTimeline: "menu:share:timeline",
        onMenuShareAppMessage: "menu:share:appmessage",
        onMenuShareQQ: "menu:share:qq",
        onMenuShareWeibo: "menu:share:weiboApp",
        previewImage: "imagePreview",
        getLocation: "geoLocation",
        openProductSpecificView: "openProductViewWithPid",
        addCard: "batchAddCard",
        openCard: "batchViewCard",
        chooseWXPay: "getBrandWCPayRequest"
    },
    p = function() {
        var b, a = {};
        for (b in o) a[o[b]] = b;
        return a
    } (),
    q = a.document,
    r = q.title,
    s = navigator.userAgent.toLowerCase(),
    t = -1 != s.indexOf("micromessenger"),
    u = -1 != s.indexOf("android"),
    v = -1 != s.indexOf("iphone") || -1 != s.indexOf("ipad"),
    w = function() {
        var a = s.match(/micromessenger\/(\d+\.\d+\.\d+)/) || s.match(/micromessenger\/(\d+\.\d+)/);
        return a ? a[1] : ""
    } (),
    x = {
        initStartTime: l(),
        initEndTime: 0,
        preVerifyStartTime: 0,
        preVerifyEndTime: 0
    },
    y = {
        version: 1,
        appId: "",
        initTime: 0,
        preVerifyTime: 0,
        networkType: "",
        isPreVerifyOk: 1,
        systemType: v ? 1 : u ? 2 : -1,
        clientVersion: w,
        url: encodeURIComponent(location.href)
    },
    z = {},
    A = {
        _completes: []
    },
    B = {
        state: 0,
        res: {}
    },
    m(function() {
        x.initEndTime = l()
    }),
    C = {
        config: function(a) {
            z = a,
            j("config", a);
            var b = z.check === !1 ? !1 : !0;
            m(function() {
                var a, d, e;
                if (b) c(o.config, {
                    verifyJsApiList: i(z.jsApiList)
                },
                function() {
                    A._complete = function(a) {
                        x.preVerifyEndTime = l(),
                        B.state = 1,
                        B.res = a
                    },
                    A.success = function() {
                        y.isPreVerifyOk = 0
                    },
                    A.fail = function(a) {
                        A._fail ? A._fail(a) : B.state = -1
                    };
                    var a = A._completes;
                    return a.push(function() {
                        z.debug || k()
                    }),
                    A.complete = function() {
                        for (var c = 0,
                        d = a.length; d > c; ++c) a[c]();
                        A._completes = []
                    },
                    A
                } ()),
                x.preVerifyStartTime = l();
                else {
                    for (B.state = 1, a = A._completes, d = 0, e = a.length; e > d; ++d) a[d]();
                    A._completes = []
                }
            }),
            z.beta && n()
        },
        ready: function(a) {
            0 != B.state ? a() : (A._completes.push(a), !t && z.debug && a())
        },
        error: function(a) {
            "6.0.2" > w || ( - 1 == B.state ? a(B.res) : A._fail = a)
        },
        checkJsApi: function(a) {
            var b = function(a) {
                var c, d, b = a.checkResult;
                for (c in b) d = p[c],
                d && (b[d] = b[c], delete b[c]);
                return a
            };
            c("checkJsApi", {
                jsApiList: i(a.jsApiList)
            },
            function() {
                return a._complete = function(a) {
                    if (u) {
                        var c = a.checkResult;
                        c && (a.checkResult = JSON.parse(c))
                    }
                    a = b(a)
                },
                a
            } ())
        },
        onMenuShareTimeline: function(a) {
            d(o.onMenuShareTimeline, {
                complete: function() {
                    c("shareTimeline", {
                        title: a.title || r,
                        desc: a.title || r,
                        img_url: a.imgUrl,
                        link: a.link || location.href
                    },
                    a)
                }
            },
            a)
        },
        onMenuShareAppMessage: function(a) {
            d(o.onMenuShareAppMessage, {
                complete: function() {
                    c("sendAppMessage", {
                        title: a.title || r,
                        desc: a.desc || "",
                        link: a.link || location.href,
                        img_url: a.imgUrl,
                        type: a.type || "link",
                        data_url: a.dataUrl || ""
                    },
                    a)
                }
            },
            a)
        },
        onMenuShareQQ: function(a) {
            d(o.onMenuShareQQ, {
                complete: function() {
                    c("shareQQ", {
                        title: a.title || r,
                        desc: a.desc || "",
                        img_url: a.imgUrl,
                        link: a.link || location.href
                    },
                    a)
                }
            },
            a)
        },
        onMenuShareWeibo: function(a) {
            d(o.onMenuShareWeibo, {
                complete: function() {
                    c("shareWeiboApp", {
                        title: a.title || r,
                        desc: a.desc || "",
                        img_url: a.imgUrl,
                        link: a.link || location.href
                    },
                    a)
                }
            },
            a)
        },
        startRecord: function(a) {
            c("startRecord", {},
            a)
        },
        stopRecord: function(a) {
            c("stopRecord", {},
            a)
        },
        onVoiceRecordEnd: function(a) {
            d("onVoiceRecordEnd", a)
        },
        playVoice: function(a) {
            c("playVoice", {
                localId: a.localId
            },
            a)
        },
        pauseVoice: function(a) {
            c("pauseVoice", {
                localId: a.localId
            },
            a)
        },
        stopVoice: function(a) {
            c("stopVoice", {
                localId: a.localId
            },
            a)
        },
        onVoicePlayEnd: function(a) {
            d("onVoicePlayEnd", a)
        },
        uploadVoice: function(a) {
            c("uploadVoice", {
                localId: a.localId,
                isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
            },
            a)
        },
        downloadVoice: function(a) {
            c("downloadVoice", {
                serverId: a.serverId,
                isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
            },
            a)
        },
        translateVoice: function(a) {
            c("translateVoice", {
                localId: a.localId,
                isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
            },
            a)
        },
        chooseImage: function(a) {
            c("chooseImage", {
                scene: "1|2",
                count: a.count || 9,
                sizeType: a.sizeType || ["original", "compressed"]
            },
            function() {
                return a._complete = function(a) {
                    if (u) {
                        var b = a.localIds;
                        b && (a.localIds = JSON.parse(b))
                    }
                },
                a
            } ())
        },
        previewImage: function(a) {
            c(o.previewImage, {
                current: a.current,
                urls: a.urls
            },
            a)
        },
        uploadImage: function(a) {
            c("uploadImage", {
                localId: a.localId,
                isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
            },
            a)
        },
        downloadImage: function(a) {
            c("downloadImage", {
                serverId: a.serverId,
                isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
            },
            a)
        },
        getNetworkType: function(a) {
            var b = function(a) {
                var c, d, e, b = a.errMsg;
                if (a.errMsg = "getNetworkType:ok", c = a.subtype, delete a.subtype, c) a.networkType = c;
                else switch (d = b.indexOf(":"), e = b.substring(d + 1)) {
                case "wifi":
                case "edge":
                case "wwan":
                    a.networkType = e;
                    break;
                default:
                    a.errMsg = "getNetworkType:fail"
                }
                return a
            };
            c("getNetworkType", {},
            function() {
                return a._complete = function(a) {
                    a = b(a)
                },
                a
            } ())
        },
        openLocation: function(a) {
            c("openLocation", {
                latitude: a.latitude,
                longitude: a.longitude,
                name: a.name || "",
                address: a.address || "",
                scale: a.scale || 28,
                infoUrl: a.infoUrl || ""
            },
            a)
        },
        getLocation: function(a) {
            a = a || {},
            c(o.getLocation, {
                type: a.type || "wgs84"
            },
            function() {
                return a._complete = function(a) {
                    delete a.type
                },
                a
            } ())
        },
        hideOptionMenu: function(a) {
            c("hideOptionMenu", {},
            a)
        },
        showOptionMenu: function(a) {
            c("showOptionMenu", {},
            a)
        },
        closeWindow: function(a) {
            a = a || {},
            c("closeWindow", {
                immediate_close: a.immediateClose || 0
            },
            a)
        },
        hideMenuItems: function(a) {
            c("hideMenuItems", {
                menuList: a.menuList
            },
            a)
        },
        showMenuItems: function(a) {
            c("showMenuItems", {
                menuList: a.menuList
            },
            a)
        },
        hideAllNonBaseMenuItem: function(a) {
            c("hideAllNonBaseMenuItem", {},
            a)
        },
        showAllNonBaseMenuItem: function(a) {
            c("showAllNonBaseMenuItem", {},
            a)
        },
        scanQRCode: function(a) {
            a = a || {},
            c("scanQRCode", {
                needResult: a.needResult || 0,
                scanType: a.scanType || ["qrCode", "barCode"]
            },
            function() {
                return a._complete = function(a) {
                    var b, c;
                    v && (b = a.resultStr, b && (c = JSON.parse(b), a.resultStr = c && c.scan_code && c.scan_code.scan_result))
                },
                a
            } ())
        },
        openProductSpecificView: function(a) {
            c(o.openProductSpecificView, {
                pid: a.productId,
                view_type: a.viewType || 0
            },
            a)
        },
        addCard: function(a) {
            var e, f, g, h, b = a.cardList,
            d = [];
            for (e = 0, f = b.length; f > e; ++e) g = b[e],
            h = {
                card_id: g.cardId,
                card_ext: g.cardExt
            },
            d.push(h);
            c(o.addCard, {
                card_list: d
            },
            function() {
                return a._complete = function(a) {
                    var c, d, e, b = a.card_list;
                    if (b) {
                        for (b = JSON.parse(b), c = 0, d = b.length; d > c; ++c) e = b[c],
                        e.cardId = e.card_id,
                        e.cardExt = e.card_ext,
                        e.isSuccess = e.is_succ ? !0 : !1,
                        delete e.card_id,
                        delete e.card_ext,
                        delete e.is_succ;
                        a.cardList = b,
                        delete a.card_list
                    }
                },
                a
            } ())
        },
        chooseCard: function(a) {
            c("chooseCard", {
                app_id: z.appId,
                location_id: a.shopId || "",
                sign_type: a.signType || "SHA1",
                card_id: a.cardId || "",
                card_type: a.cardType || "",
                card_sign: a.cardSign,
                time_stamp: a.timestamp + "",
                nonce_str: a.nonceStr
            },
            function() {
                return a._complete = function(a) {
                    a.cardList = a.choose_card_info,
                    delete a.choose_card_info
                },
                a
            } ())
        },
        openCard: function(a) {
            var e, f, g, h, b = a.cardList,
            d = [];
            for (e = 0, f = b.length; f > e; ++e) g = b[e],
            h = {
                card_id: g.cardId,
                code: g.code
            },
            d.push(h);
            c(o.openCard, {
                card_list: d
            },
            a)
        },
        chooseWXPay: function(a) {
            c(o.chooseWXPay, f(a), a)
        }
    },
    b && (a.wx = a.jWeixin = C),
    C
});